# -*- coding: utf-8 -*-
from autores.models import Autor, AutorOrdenado
from contenidos.models import ContenidoDocsPubs
from datos_taxonomicos.models import Dato
from django.contrib.contenttypes import generic
from django.core import urlresolvers
from django.db import models
from expertos.models import Experto
from genericm2m.models import RelatedObjectsDescriptor
from instituciones.models import Institucion
from lineas_de_investigacion.models import LineaInvestigacion
from localidades.models import Pais, Ciudad, Lugar
from model_utils.models import InheritanceCastModel
from usuarios.models import Rol


# Create your models here.
"""
class Publicacion(models.Model):
    titulo = models.CharField(max_length=100)
    anho = models.IntegerField()
    descripcion = models.CharField(max_length=200,blank=True,null=True)
    palabrasClave = models.CharField(max_length=200,blank=True,null=True)
    url = models.URLField(blank=True,null=True)
    TIPO_DE_PUBLICACION_CHOICES = (
        ('A', 'Artículo de revista'),
        ('C', 'Capítulo de Libro'),
        ('L', 'Libro'),
        ('P', 'Publicación en conferencia'),
        ('R', 'Reporte técnico'),
        ('T', 'Tesis'),
    )
    tipo = models.CharField(max_length=1, choices=TIPO_DE_PUBLICACION_CHOICES)
    
    #relaciones
    nivel_acceso= models.ForeignKey(Rol)
    autores = models.ManyToManyField(Experto)
    localidad = models.ForeignKey(Localidad,blank=True,null=True)
    lineas = models.ManyToManyField(LineaInvestigacion,blank=True,null=True)
    datos = models.ManyToManyField(DatoTaxonomico,blank=True,null=True)
    archivo = models.ForeignKey(Contenido,blank=True,null=True)
    #relacion con autores no expertos
    #autores = models.ManyToManyField('Autor')
    
#probablmente habra que crear una clase autor

"""
NIVEL_DE_ACCESO = (
    ('', '---------'),
    ('VI', 'Visitante'),
    ('US', 'Usuario'),
    ('EX', 'Experto'),
    ('AD', 'Administrador'),
) 

class Publicacion(InheritanceCastModel):
    titulo = models.CharField(max_length=100)
    anho = models.IntegerField(blank=True,null=True,verbose_name= u'Año de la Publicación')
    descripcion = models.TextField(max_length=200,blank=True,null=True,verbose_name= u'Breve Descripción Adicional')
    palabras_clave = models.CharField(max_length=200,blank=True,null=True)
    url = models.URLField(blank=True,null=True,verbose_name=u'Página Web de Referencia')
    #relaciones
    nivel_de_acceso = models.ForeignKey(Rol,blank=True,null=True,verbose_name= u'*Nivel de Acceso')
    autores = models.ManyToManyField(Experto,blank=True,null=True,verbose_name= u'Autores Experto')
    autores_externos = models.ManyToManyField(AutorOrdenado,blank=True,null=True,verbose_name= u'Autores Externos')
    lineas = models.ManyToManyField(LineaInvestigacion,blank=True,null=True,verbose_name = u'Asociar a Líneas de Investigación')
    datos = models.ManyToManyField(Dato,blank=True,null=True,verbose_name = u'Asociar a Datos Taxonómicos')
    instituciones = models.ManyToManyField(Institucion,blank=True,null=True,verbose_name = u'Asociar a Instituciones')
    archivo = models.ForeignKey(ContenidoDocsPubs,blank=True,null=True)
    creador = models.ForeignKey(Experto,blank=True,null=True,related_name='creador_de_publicacion' )
#    def get_absolute_url(self):
#        return urlresolvers.reverse('publicaciones:publicacion_update', args=(self.pk,))
    doc = models.FileField(upload_to='archivos',blank=True,null=True,verbose_name='Archivo')
    nivel = models.CharField(max_length=2, choices=NIVEL_DE_ACCESO,blank=True,null=True,verbose_name='Nivel de Acesso')
    def en_detalle_html(self):
        publicaciones = []
        if self.titulo:
            publicaciones.append(u'Título: %s' % self.titulo)
        if self.descripcion:
            publicaciones.append(u'Descripción: %s' % self.descripcion)
        if self.anho:
            publicaciones.append( u'Año: %s' % self.anho)

        return publicaciones
    
    def __unicode__(self):
        return self.titulo
    def object_real_name(self):
        #Aqui se podria hacer comparacion para mostrar el nombre correctamente
        #Por ejemplo, si self.cast()._meta.verbose_name. == articulo return 'Artículo de revista'
        if self.cast()._meta.verbose_name == 'articulo':
            return u'Artículo de Revista'
        elif self.cast()._meta.verbose_name == 'capitulo':
            return u'Capítulo de Libro'
        elif self.cast()._meta.verbose_name == 'libro':
            return u'Libro'
        elif self.cast()._meta.verbose_name == 'conferencia':
            return u'Publicación en Conferencia'
        elif self.cast()._meta.verbose_name == 'reporte':
            return u'Reporte Técnico'
        elif self.cast()._meta.verbose_name == 'tesis':
            return u'Tesis'
        #return self.cast()._meta.verbose_name.capitalize()

    def get_autores_dos(self):
        if self.autores_externos.all():
            try:
                if self.autores_externos.all()[0] and self.autores_externos.all()[1]:
                    autor1 = self.autores_externos.all()[0]
                    autor2 = self.autores_externos.all()[1]
                    return u'%s. %s y %s. %s' % (autor1.nombre[0],autor1.apellido,autor2.nombre[0],autor2.apellido) 
            except:
                return u''
        return u''
                
    def get_autores(self):
        cantidad = self.autores_externos.count()
        if cantidad == 1:
            autor = self.autores_externos.all()[0]
            return u'%s. %s' % (autor.nombre[0], autor.apellido)
        elif cantidad >= 2:
            autor1 = self.autores_externos.all()[0]
            autor2 = self.autores_externos.all()[1]
            if cantidad == 2:
                return u'%s. %s y %s. %s' % (autor1.nombre[0],autor1.apellido,autor2.nombre[0],autor2.apellido)
            else:
                return u'%s. %s, %s. %s y otros' % (autor1.nombre[0],autor1.apellido,autor2.nombre[0],autor2.apellido)


class Articulo(Publicacion):
    nombre_revista = models.CharField(max_length=200,blank=True,null=True, verbose_name = u'*Nombre de la Revista')
    volumen = models.IntegerField(blank=True,null=True,verbose_name='*Volúmen')
    numero = models.IntegerField(blank=True,null=True,verbose_name='*Número')
    paginas = models.CharField(max_length=200,blank=True,null=True,verbose_name = u'*Páginas')
    editorial= models.CharField(max_length=200,blank=True,null=True)
    #ciudad_pais = models.ForeignKey(Lugar,blank=True,null=True,verbose_name = u'Ciudad/País')
    ciudad = models.ForeignKey(Ciudad,blank=True,null=True,verbose_name = u'Ciudad')
    pais = models.ForeignKey(Pais,blank=True,null=True,verbose_name = u'País')
    #generic foreign key para agregar ciudad o pais
    #content_type = models.ForeignKey('contenttypes.contenttype', related_name='ciudad_pais_relacionado',null = True,blank = True,verbose_name = 'Ciudad/País')
    #object_id = models.PositiveIntegerField(null = True,blank = True)
    #content_object = generic.GenericForeignKey('content_type', 'object_id')
    autores_todos = RelatedObjectsDescriptor()
    
class Capitulo(Publicacion):
    autores_libro = models.CharField(max_length=200,blank=True,null=True)
    titulo_libro = models.CharField(max_length=200,blank=True,null=True,verbose_name = u'*Título del Libro')
    paginas = models.CharField(max_length=200,blank=True,null=True,verbose_name = u'*Páginas')
    editorial = models.CharField(max_length=200,blank=True,null=True,verbose_name = u'*Editorial')
    nro_estandar = models.CharField(max_length=200,blank=True,null=True)
    pais = models.ForeignKey(Pais,blank=True,null=True,verbose_name = u'País')
    autores_ordenado_libro = models.ManyToManyField(AutorOrdenado,blank=True,null=True,verbose_name= u'Autores del Libro')

    
class Libro(Publicacion):
    editorial = models.CharField(max_length=200,blank=True,null=True,verbose_name = u'*Editorial')
    nro_estandar = models.CharField(max_length=200,blank=True,null=True)    
    ciudad = models.ForeignKey(Ciudad,blank=True,null=True,verbose_name = u'Ciudad')
    pais = models.ForeignKey(Pais,blank=True,null=True,verbose_name = u'País')
    
class Conferencia(Publicacion):
    nombre_conferencia = models.CharField(max_length=200,blank=True,null=True,verbose_name = u'*Nombre de la Conferencia')
    paginas = models.CharField(max_length=200,blank=True,null=True,verbose_name = u'Páginas')
    editorial = models.CharField(max_length=200,blank=True,null=True)
    nro_estandar = models.CharField(max_length=200,blank=True,null=True)
    #ciudad_pais = models.ForeignKey(Lugar,blank=True,null=True,verbose_name = u'Ciudad/País')
    ciudad = models.ForeignKey(Ciudad,blank=True,null=True,verbose_name = u'Ciudad')
    pais = models.ForeignKey(Pais,blank=True,null=True,verbose_name = u'*País')

class Reporte(Publicacion):
    institucion = models.CharField(max_length=200,blank=True,null=True,verbose_name = u'*Institución')
    #ciudad_pais = models.ForeignKey(Lugar,blank=True,null=True,verbose_name = u'Ciudad/País')
    ciudad = models.ForeignKey(Ciudad,blank=True,null=True,verbose_name = u'Ciudad')
    pais = models.ForeignKey(Pais,blank=True,null=True,verbose_name = u'País') 
    
class Tesis(Publicacion):
    MES = (
        ('1', 'Enero'),
        ('2', 'Febrero'),
        ('3', 'Marzo'),
        ('4', 'Abril'),
        ('5', 'Mayo'),
        ('6', 'Junio'),
        ('7', 'Julio'),
        ('8', 'Agosto'),
        ('9', 'Septiembre'),
        ('10', 'Octubre'),
        ('11', 'Noviembre'),
        ('12', 'Diciembre'),
    )
    TIPO_TESIS_CHOICES = (
        ('P', 'Pre-Grado'),
        ('G', 'Grado'),
        ('O', 'Post-Grado'),
    )
    institucion = models.CharField(max_length=200,blank=True,null=True)
    carrera = models.CharField(max_length=200,blank=True,null=True)
    mes = models.CharField(max_length=2,choices=MES,blank=True,null=True)
    tutores = models.CharField(max_length=200,blank=True,null=True)
    #ciudad_pais = models.ForeignKey(Lugar,blank=True,null=True,verbose_name = u'Ciudad/País')
    ciudad = models.ForeignKey(Ciudad,blank=True,null=True,verbose_name = u'Ciudad')
    pais = models.ForeignKey(Pais,blank=True,null=True,verbose_name = u'País')
    tipo_tesis = models.CharField(max_length=1, choices=TIPO_TESIS_CHOICES,blank=True,null=True)
    

    